######## snakemake preamble start (automatically inserted, do not edit) ########
import sys; sys.path.extend(['/home/oma21/miniconda3/envs/enm_snakemake/lib/python3.9/site-packages', '/home/oma21/enm_package/notebooks']); import pickle; snakemake = pickle.loads(b'\x80\x04\x95\x99\x04\x00\x00\x00\x00\x00\x00\x8c\x10snakemake.script\x94\x8c\tSnakemake\x94\x93\x94)\x81\x94}\x94(\x8c\x05input\x94\x8c\x0csnakemake.io\x94\x8c\nInputFiles\x94\x93\x94)\x81\x94(\x8c\x17data/interim/pcc.pickle\x94\x8c\x1bdata/interim/sensors_df.csv\x94\x8c\x1ddata/interim/effectors_df.csv\x94e}\x94(\x8c\x06_names\x94}\x94(\x8c\x10pickle_file_name\x94K\x00N\x86\x94\x8c\x0bsensors_pcc\x94K\x01N\x86\x94\x8c\x0ceffector_pcc\x94K\x02N\x86\x94u\x8c\x12_allowed_overrides\x94]\x94(\x8c\x05index\x94\x8c\x04sort\x94eh\x18\x8c\tfunctools\x94\x8c\x07partial\x94\x93\x94h\x06\x8c\x19Namedlist._used_attribute\x94\x93\x94\x85\x94R\x94(h\x1e)}\x94\x8c\x05_name\x94h\x18sNt\x94bh\x19h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x19sNt\x94bh\x10h\nh\x12h\x0bh\x14h\x0cub\x8c\x06output\x94h\x06\x8c\x0bOutputFiles\x94\x93\x94)\x81\x94\x8c)reports/01-Fig1bcd_3c_4b_5df-052421.ipynb\x94a}\x94(h\x0e}\x94\x8c\x08notebook\x94K\x00N\x86\x94sh\x16]\x94(h\x18h\x19eh\x18h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x18sNt\x94bh\x19h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x19sNt\x94bh/h,ub\x8c\x06params\x94h\x06\x8c\x06Params\x94\x93\x94)\x81\x94}\x94(h\x0e}\x94h\x16]\x94(h\x18h\x19eh\x18h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x18sNt\x94bh\x19h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x19sNt\x94bub\x8c\twildcards\x94h\x06\x8c\tWildcards\x94\x93\x94)\x81\x94}\x94(h\x0e}\x94h\x16]\x94(h\x18h\x19eh\x18h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x18sNt\x94bh\x19h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x19sNt\x94bub\x8c\x07threads\x94K\x01\x8c\tresources\x94h\x06\x8c\tResources\x94\x93\x94)\x81\x94(K\x01K\x01e}\x94(h\x0e}\x94(\x8c\x06_cores\x94K\x00N\x86\x94\x8c\x06_nodes\x94K\x01N\x86\x94uh\x16]\x94(h\x18h\x19eh\x18h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x18sNt\x94bh\x19h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x19sNt\x94bh_K\x01haK\x01ub\x8c\x03log\x94h\x06\x8c\x03Log\x94\x93\x94)\x81\x94\x8c)reports/01-Fig1bcd_3c_4b_5df-052421.ipynb\x94a}\x94(h\x0e}\x94h/K\x00N\x86\x94sh\x16]\x94(h\x18h\x19eh\x18h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x18sNt\x94bh\x19h\x1ch\x1e\x85\x94R\x94(h\x1e)}\x94h"h\x19sNt\x94bh/hpub\x8c\x06config\x94}\x94\x8c\x04rule\x94\x8c\x0ffigure_networks\x94\x8c\x0fbench_iteration\x94N\x8c\tscriptdir\x94\x8c!/home/oma21/enm_package/notebooks\x94ub.'); from snakemake.logging import logger; logger.printshellcmds = False; import os; os.chdir('/home/oma21/enm_package');
######## snakemake preamble end #########
%load_ext autoreload
%autoreload 2
from matplotlib.lines import Line2D
import qgrid
import matplotlib.pyplot as plt
import matplotlib as mpl
import networkx as nx
import numpy as np
import pandas as pd
import pickle
import os
import re
import itertools as itr
from enm.visualize import plot_correlation_density, plot_vector, plot_lambda_collectivity
from enm.Enm import Enm
from enm.utils import *
The autoreload extension is already loaded. To reload it, use: %reload_ext autoreload
#os.chdir('../')
with open(snakemake.input.pickle_file_name,'rb') as f:
e_pcc = pickle.load(f)
This could be different from the ones shown in paper due to random node position calculation
This does not change any claims in the paper
e_pcc.spring_pos(seed=12)
pos =e_pcc.graph_gc.nodes('pos')# nx.spring_layout(e_pcc.graph_gc,k=0.6,iterations=200, seed=11)#
fig, ax =plt.subplots()
nx.draw_networkx_nodes(e_pcc.graph_gc,
node_size=0.2,
alpha=0.5,
node_color='k',
pos=pos,
ax=ax
# node_shape=matplotlib.markers.MarkerStyle(marker='o',fillstyle='full')
)
nx.draw_networkx_edges(e_pcc.graph_gc,
alpha= 0.1,
width= 0.1,
edge_color='k',
pos=pos,
label='PCC>0.2',ax=ax)
<matplotlib.collections.LineCollection at 0x7faa5ef77c90>
e_pcc.heatmap_annotated()
/home/oma21/enm_package/enm/visualize.py:334: UserWarning: FixedFormatter should only be used together with FixedLocator ax_heatmap.set_xticklabels(idx1_cl, minor=False) /home/oma21/enm_package/enm/visualize.py:342: UserWarning: FixedFormatter should only be used together with FixedLocator ax_heatmap.set_yticklabels(idx2_cl, minor=False)
(array([0.00225456, 0.00212964, 0.00064455, ..., 0.0018722 , 0.00188671,
0.00196717]),
array([0.00670243, 0.00670243, 0.00610539, ..., 0.00030683, 0.00022774,
0.00013241]))
get_clustered_nodes finds the gene names belonging the outmost, smaller cluster for rows and columns as shown.
cc = e_pcc.df.iloc[e_pcc.get_clustered_nodes('column'),:]
rc = e_pcc.df.iloc[e_pcc.get_clustered_nodes('row'),:]
df = e_pcc.df
df['cc'] = ['cc' if i in cc.orf_name.tolist() else 'other' for i in df.orf_name.tolist()]
df['rc'] = ['rc' if i in rc.orf_name.tolist() else 'other' for i in df.orf_name.tolist()]
import seaborn as sns
color = {'cc': 'orange','other':'k','rc':'orangered'}
fig, ax = plt.subplots(1,2,figsize=(8,4))
sns.boxplot(data=df, x='rc',y='eff',order=['rc','other'],palette=color,ax=ax[0])
ax[0].set_xticklabels(['Distinct\nRow\nCluster', 'Other genes'])
ax[0].set_xlabel('Row clusters')
ax[0].set_ylabel('Effectiveness')
sns.boxplot(data=df, x='cc',y='sens',order=['cc','other'],palette=color,ax=ax[1])
ax[1].set_xticklabels(['Distinct\nColumn\nCluster', 'Other genes'])
ax[1].set_xlabel('Columns clusters')
ax[1].set_ylabel('Sensitivity')
plt.tight_layout()
#plt.savefig('reports/figures/network_images_040221/colcluster_sens.png')
fig, ax = plt.subplots(figsize=(12,12))
#axs = ax.ravel()
legend_elements = [ ]
#for i in range(len(sensor_order)):
nx.draw_networkx_nodes(e_pcc.graph_gc, ax =ax , pos=pos,node_size=1, node_color='black')
nx.draw_networkx_edges(e_pcc.graph_gc, ax =ax , pos=pos,node_size=1, edge_color='black',alpha=0.2, width=0.1)
nx.draw_networkx_nodes(e_pcc.graph_gc,
nodelist=rc.orf_name.tolist(),
ax=ax,
pos=pos,
node_color='orangered',
edgecolors='black',
node_size=100,
node_shape='d')
ax.set_facecolor('white')
legend_elements.extend(
[Line2D([0], [0], marker='d', color='black', label='Row cluster\ngenes',
markerfacecolor='orangered', markersize=50, linestyle="None"),
Line2D([0], [0], marker='o', color='black', label='Other Genes',
markerfacecolor='black', markersize=25, linestyle="None"),
# Line2D([0], [0], marker='o', color='black', label='Effectors',
# markerfacecolor='black', markersize=10, linestyle="None"),
# Line2D([0], [0], marker='^', color='black', label='Sensors',
# markerfacecolor='black', markersize=10, linestyle="None"),
Line2D([0], [0], marker='o', color='black', label= 'High\nfunctional\nsimilarity',
markerfacecolor='black', markersize=0, linestyle="-", alpha=0.5,lw=10)
]
)
lgd = ax.legend(handles=legend_elements, fontsize=40,loc='center left', bbox_to_anchor=(1.1, 0.5))
#nx.draw_networkx_edges(nx.induced_subgraph(e_pcc.graph_gc, effector_pcc.orf_name.tolist()), ax=ax , pos=pos, edge_color='blue',alpha=0.5)
#plt.savefig('reports/figures/network_images_040221/rowcluster_nw_map.png',bbox_inches='tight')
fig, ax = plt.subplots(figsize=(12,12))
#axs = ax.ravel()
legend_elements = [ ]
#for i in range(len(sensor_order)):
nx.draw_networkx_nodes(e_pcc.graph_gc, ax =ax , pos=pos,node_size=1, node_color='black')
nx.draw_networkx_edges(e_pcc.graph_gc, ax =ax , pos=pos,node_size=1, edge_color='black',alpha=0.2, width=0.1)
nx.draw_networkx_nodes(e_pcc.graph_gc,
nodelist=cc.orf_name.tolist(),
ax=ax,
pos=pos,
node_color='orange',
edgecolors='black',
node_size=100,
node_shape='D')
ax.set_facecolor('white')
legend_elements.extend([
Line2D([0], [0], marker='D', color='black', label='Column cluster\ngenes',
markerfacecolor='orange', markersize=50, linestyle="None"),
Line2D([0], [0], marker='o', color='black', label='Other Genes',
markerfacecolor='black', markersize=25, linestyle="None"),
Line2D([0], [0], marker='o', color='black', label= 'High\nfunctional\nsimilarity',
markerfacecolor='black', markersize=0, linestyle="-", alpha=0.5,lw=10),
]
)
lgd = ax.legend(handles=legend_elements, fontsize=40,loc='center left', bbox_to_anchor=(1.1, 0.5))
#nx.draw_networkx_edges(nx.induced_subgraph(e_pcc.graph_gc, effector_pcc.orf_name.tolist()), ax=ax , pos=pos, edge_color='blue',alpha=0.5)
#plt.savefig('reports/figures/network_images_040221/colcluster_nw_map.png',bbox_inches='tight')
sensor_go_rename = {
"cellular response to iron ion starvation":'Iron ion transport' ,
"mitochondria-nucleus signaling pathway": "Mitochondria-nucleus\nsignaling pathway\nand\nTricarboxylic acid cycle",
"phenylalanine transport": "Phenylalanine transport",
"hexose metabolic process": "Hexose metabolic process",
"tricarboxylic acid cycle": "Tricarboxylic acid cycle"
}
sensors_pcc = pd.read_csv(snakemake.input.sensors_pcc)
sensor_colors = ["#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33"]
sensors_pcc['go_group']=sensors_pcc['go_group'].map(sensor_go_rename,na_action='ignore')
sensor_order = sensors_pcc.groupby('go_group').sens.median().sort_values().index.tolist()
fig, ax = plt.subplots(figsize=(12,12))
#axs = ax.ravel()
legend_elements = [ ]
#for i in range(len(sensor_order)):
e_pcc.plot_network_spring(ax=ax,
node_size=1,
node_color='black',
# node_size = [100 if i in sensors_pcc.orf_name.values or i in effector_pcc.orf_name.values else 1 for i in e_pcc.nodes],
#node_color = ['red' if i in sensors_pcc.orf_name.values else 'blue' if i in effector_pcc.orf_name.values else 'black' for i in e_pcc.nodes],
edge_color='black',savefig=False)
# node_shape=['^' if i in sensors_pcc.orf_name.values else 'v' if i in effector_pcc.orf_name.values else 'o' for i in e_pcc.nodes])
# nx.draw_networkx_nodes(e_pcc.graph_gc, nodelist=sensors_pcc.orf_name.values, node_size=200, pos=pos,
# node_color='black',
# node_shape='^',edgecolors='black',
# linewidths=1)
nx.draw_networkx_nodes(nx.induced_subgraph(e_pcc.graph_gc, sensors_pcc.orf_name.tolist()),
pos=pos,
node_color='black', alpha=1, node_shape='^')
for itr, i in enumerate(sensor_order):
#print(i, effector_colors[itr])
orf_names_to_plot = sensors_pcc.loc[sensors_pcc.go_group==i, 'orf_name'].tolist()
nx.draw_networkx_nodes(e_pcc.graph_gc, nodelist=orf_names_to_plot, node_size=200, pos=pos,
node_color=sensor_colors[itr],
node_shape='^',edgecolors='black',
linewidths=1)
legend_elements.append(
Line2D([0], [0], marker='^', color='black', label=f'Sensors ({i})',
markerfacecolor=sensor_colors[itr], markersize=30, linestyle="None")
)
ax.set_facecolor('white')
legend_elements.append(
Line2D([0], [0], marker='^', color='black', label=f'Sensors (No GO Enrichments )',
markerfacecolor='black', markersize=30, linestyle="None")
)
legend_elements.extend(
[Line2D([0], [0], marker='o', color='black', label='Other Genes',
markerfacecolor='black', markersize=10, linestyle="None"),
# Line2D([0], [0], marker='o', color='black', label='Effectors',
# markerfacecolor='black', markersize=10, linestyle="None"),
# Line2D([0], [0], marker='^', color='black', label='Sensors',
# markerfacecolor='black', markersize=10, linestyle="None"),
Line2D([0], [0], marker='o', color='black', label= 'High functional similarity',
markerfacecolor='black', markersize=0, linestyle="-", alpha=0.5, lw=10),
Line2D([0], [0], marker='o', color='red', label= 'Sensor-Sensor edges',
markerfacecolor='#018571', markersize=0, linestyle="-",lw=10)
#Line2D([0], [0], marker='o', color='blue', label= 'Effector-Effector edges',
# markerfacecolor='#a6611a', markersize=0, linestyle="-")
]
)
#lgd = ax.legend(handles=legend_elements, fontsize=22,loc='center left', bbox_to_anchor=(1.1, 0.5),ncol=5)
nx.draw_networkx_edges(nx.induced_subgraph(e_pcc.graph_gc, sensors_pcc.orf_name.tolist()),pos=pos, edge_color='red', alpha=0.5)
<matplotlib.collections.LineCollection at 0x7fa9f0906250>
fig = plt.figure()
figlegend = plt.figure(figsize=(2,2))
ax = fig.add_subplot(111)
#lines = ax.plot(range(10), plt.randn(10), range(10), plt.randn(10))
ax.axis('off')
lgd = ax.legend(handles=legend_elements, fontsize=40, loc='center',ncol=2)
fig.show()
<Figure size 144x144 with 0 Axes>
effector_go_group_map = {
"phosphatidylinositol biosynthetic process":"Golgi vesicle transport",
"mitochondrial cytochrome c oxidase assembly":"Respiratory complex assembly",
"replication fork protection":"Chromosome segregation"
}
effector_pcc = pd.read_csv(snakemake.input.effector_pcc)
effector_colors = ["#A65628", "#F781BF", "#999999"]
effector_pcc['go_group'] = effector_pcc['go_group'].map(effector_go_group_map)
effector_order = effector_pcc.groupby('go_group').eff.median().sort_values().index.tolist()
fig, ax = plt.subplots(figsize=(12,12))
#axs = ax.ravel()
legend_elements = [ ]
#for i in range(len(sensor_order)):
e_pcc.plot_network_spring(ax=ax,
node_size=1,
node_color='black',
# node_size = [100 if i in sensors_pcc.orf_name.values or i in effector_pcc.orf_name.values else 1 for i in e_pcc.nodes],
#node_color = ['red' if i in sensors_pcc.orf_name.values else 'blue' if i in effector_pcc.orf_name.values else 'black' for i in e_pcc.nodes],
edge_color='black',savefig=False)
# node_shape=['^' if i in sensors_pcc.orf_name.values else 'v' if i in effector_pcc.orf_name.values else 'o' for i in e_pcc.nodes])
# nx.draw_networkx_nodes(e_pcc.graph_gc, nodelist=sensors_pcc.orf_name.values, node_size=200, pos=pos,
# node_color='black',
# node_shape='^',edgecolors='black',
# linewidths=1)
for itr, i in enumerate(effector_order):
# print(i, effector_colors[itr])
#print(itr)
orf_names_to_plot = effector_pcc.loc[effector_pcc.go_group==i, 'orf_name'].tolist()
nx.draw_networkx_nodes(e_pcc.graph_gc, nodelist=orf_names_to_plot, node_size=200, pos=pos,
node_color=effector_colors[itr],
node_shape='o',edgecolors='black',
linewidths=1)
legend_elements.append(
Line2D([0], [0], marker='o', color='black', label=f'Effectors ({i})',
markerfacecolor=effector_colors[itr], markersize=30, linestyle="None")
)
ax.set_facecolor('white')
legend_elements.extend(
[Line2D([0], [0], marker='o', color='black', label='Other Genes',
markerfacecolor='black', markersize=10, linestyle="None"),
# Line2D([0], [0], marker='o', color='black', label='Effectors',
# markerfacecolor='black', markersize=10, linestyle="None"),
# Line2D([0], [0], marker='^', color='black', label='Sensors',
# markerfacecolor='black', markersize=10, linestyle="None"),
Line2D([0], [0], marker='o', color='black', label= 'High functional similarity',
markerfacecolor='black', markersize=0, linestyle="-", alpha=0.5,lw=10),
Line2D([0], [0], marker='o', color='blue', label= 'Effector-Effector edges',
markerfacecolor='#a6611a', markersize=0, linestyle="-",lw=10)
]
)
lgd = ax.legend(handles=legend_elements, fontsize=22,loc='center left', bbox_to_anchor=(1.1, 0.5))
nx.draw_networkx_edges(nx.induced_subgraph(e_pcc.graph_gc, effector_pcc.orf_name.tolist()), ax=ax , pos=pos, edge_color='blue',alpha=0.5)
#plt.savefig('reports/figures/network_images_040221/tmp_nw_eff.png',bbox_inches='tight')
<matplotlib.collections.LineCollection at 0x7fa9ed9afb10>
#define source and target effector/sensor clusters
eff_group = 'Chromosome segregation'
sens_group = "Mitochondria-nucleus\nsignaling pathway\nand\nTricarboxylic acid cycle"
#select source and target gene from respective clusters
source = 'ctf4'
target = 'rtg1'
#calculate source and tartget
l1 = e_pcc.get_prs_weighted_path(source,target)[1]
sub = nx.induced_subgraph(e_pcc.graph_gc, l1)
fig, ax = plt.subplots(figsize=(12,12))
legend_elements = [ ]
nx.draw_networkx_nodes(e_pcc.graph_gc, pos=pos, node_size=1, ax=ax, node_color='black')
nx.draw_networkx_nodes(sub,pos=pos,alpha=0.8,
# node_size = [prs_mat_df.loc[source,:].to_dict()[i]*10000 for i in sub.nodes],
node_color = ['red' if i ==target or i == 'fum1' or i=='fbp1' else 'blue' if i==source else 'black' for i in sub.nodes])
nx.draw_networkx_edges(sub,pos=pos)
for itr, i in enumerate(sensor_order):
if i ==sens_group:
orf_names_to_plot = sensors_pcc.loc[sensors_pcc.go_group==i, 'orf_name'].tolist()
nx.draw_networkx_nodes(e_pcc.graph_gc, nodelist=orf_names_to_plot, node_size=200, pos=pos,
node_color=sensor_colors[itr],
node_shape='^',edgecolors='black',
linewidths=1)
nx.draw_networkx_edges(nx.induced_subgraph(e_pcc.graph_gc, orf_names_to_plot), ax=ax , pos=pos, edge_color='red',alpha=0.5)
legend_elements.append(
Line2D([0], [0], marker='^', color='black', label=f'Sensors ({i})',
markerfacecolor=sensor_colors[itr], markersize=12, linestyle="None")
)
for itr, i in enumerate(effector_order):
if i == eff_group:
orf_names_to_plot = effector_pcc.loc[effector_pcc.go_group==i,'orf_name'].tolist()
nx.draw_networkx_nodes(e_pcc.graph_gc, nodelist=orf_names_to_plot, node_size=200, pos=pos,
node_color=effector_colors[itr],
node_shape='o',edgecolors='black',
linewidths=1)
nx.draw_networkx_edges(nx.induced_subgraph(e_pcc.graph_gc, orf_names_to_plot), ax=ax , pos=pos, edge_color='blue',alpha=0.5)
ax.set_facecolor('white')
#plt.savefig('tmp_nw.png',bbox_inches='tight')
eff_group = 'Respiratory complex assembly'
sens_group = 'Iron ion transport'
source = 'aim10'
target = 'fet3'
l1 = e_pcc.get_prs_weighted_path(source,target)[1]
sub = nx.induced_subgraph(e_pcc.graph_gc, l1)
fig, ax = plt.subplots(figsize=(12,12))
legend_elements = [ ]
nx.draw_networkx_nodes(e_pcc.graph_gc, pos=pos, node_size=1, ax=ax, node_color='black')
nx.draw_networkx_nodes(sub,pos=pos,alpha=0.8,
# node_size = [prs_mat_df.loc[source,:].to_dict()[i]*10000 for i in sub.nodes],
node_color = ['red' if i ==target or i == 'fum1' or i=='fbp1' else 'blue' if i==source else 'black' for i in sub.nodes])
nx.draw_networkx_edges(sub,pos=pos)
for itr, i in enumerate(sensor_order):
#print(i, effector_colors[itr])
if i ==sens_group:
orf_names_to_plot = sensors_pcc.loc[sensors_pcc.go_group==i, 'orf_name'].tolist()
nx.draw_networkx_nodes(e_pcc.graph_gc, nodelist=orf_names_to_plot, node_size=200, pos=pos,
node_color=sensor_colors[itr],
node_shape='^',edgecolors='black',
linewidths=1)
nx.draw_networkx_edges(nx.induced_subgraph(e_pcc.graph_gc, orf_names_to_plot), ax=ax , pos=pos, edge_color='red',alpha=0.5)
legend_elements.append(
Line2D([0], [0], marker='^', color='black', label=f'Sensors ({i})',
markerfacecolor=sensor_colors[itr], markersize=12, linestyle="None")
)
for itr, i in enumerate(effector_order):
if i == eff_group:
orf_names_to_plot = effector_pcc.loc[effector_pcc.go_group==i,'orf_name'].tolist()
nx.draw_networkx_nodes(e_pcc.graph_gc, nodelist=orf_names_to_plot, node_size=200, pos=pos,
node_color=effector_colors[itr],
node_shape='o',edgecolors='black',
linewidths=1)
nx.draw_networkx_edges(nx.induced_subgraph(e_pcc.graph_gc, orf_names_to_plot), ax=ax , pos=pos, edge_color='blue',alpha=0.5)
ax.set_facecolor('white')
#plt.savefig('tmp_nw.png',bbox_inches='tight')